2020-2021 Sunseeker Telemetry and Lighting System
timer_a_ex1_continuousOverflowInterrupt.c
Go to the documentation of this file.
1 /* --COPYRIGHT--,BSD
2  * Copyright (c) 2017, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  * --/COPYRIGHT--*/
32 /*******************************************************************************
33  * MSP430i2xx Timer_A - Continuous Mode Overflow Interrupt
34  *
35  * Description: In this example, the 16 bit Timer is configured in continuous
36  * mode and setup to interrupt on an overflow. The timer uses ACLK as its
37  * source running at 32kHz. Therefore 2^16 counts at 32kHz will take ~2.048
38  * seconds to overflow. The LED show toggle at a period of ~4.096 seconds.
39  *
40  * MSP430i2041
41  * ------------------
42  * /|\| |
43  * | | |
44  * --|RST P1.4|--->LED
45  * | |
46  * | |
47  * | |
48  *
49  *
50  * Author: Zack Lalanne
51  ******************************************************************************/
52 #include "driverlib.h"
53 
54 int main(void) {
55 
56  Timer_A_initContinuousModeParam continuousModeConfig = {
57  TIMER_A_CLOCKSOURCE_ACLK, // ACLK Clock Source
58  TIMER_A_CLOCKSOURCE_DIVIDER_1, // ACLK/1 = 32kHz
59  TIMER_A_TAIE_INTERRUPT_ENABLE, // Enable Overflow ISR
60  TIMER_A_DO_CLEAR // Clear Counter
61  };
62 
63  WDT_hold(WDT_BASE);
64 
65  // Setting P1.4 as LED Pin
66  GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN4);
67  GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN4);
68 
69  // Setting the DCO to use the internal resistor. DCO will be at 16.384MHz
70  // ACLK is at 32kHz
71  CS_setupDCO(CS_INTERNAL_RESISTOR);
72 
73  // Configure the timer to use ACLK and interrupt on overflow
74  Timer_A_initContinuousMode(TIMER_A0_BASE, &continuousModeConfig);
75 
76  Timer_A_startCounter(TIMER_A0_BASE, TIMER_A_CONTINUOUS_MODE);
77 
78  // Go into LPM0 with interrupts enabled
79  __bis_SR_register(LPM0_bits | GIE);
80 }
81 
82 #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
83 #pragma vector=TIMER0_A1_VECTOR
84 __interrupt
85 #elif defined(__GNUC__)
86 __attribute__((interrupt(TIMER0_A1_VECTOR)))
87 #endif
88 void TA0_ISR(void) {
89  switch(__even_in_range(TAIV, TA0IV_TAIFG)) {
90  case TA0IV_NONE: break;
91  case TA0IV_TACCR1: break;
92  case TA0IV_TACCR2: break;
93  case TA0IV_TAIFG:
94  GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN4);
95  break;
96  default: break;
97  }
98 }
GPIO_setOutputLowOnPin(GPIO_PORT_LED1|GPIO_PORT_LED2, GPIO_PIN_LED1|GPIO_PIN_LED2)